/**********************************************************************************************************************************
 * define.js说明
 * 注意点在于表单权限的生成和xml的组装
 * 	1 表单权限
 * 		在选择表单的地方有个事件，当用户选择了流程所用的表单后  通过 jsonplugin和ajax把取得的所有表单
 * 		组合成json对象返回给页面，页面在通过js的调用，把所有的表单组合成一个html权限选择框保存在id = div2的
 * 		层中，当在流程设计器中点击该环节的表单权限控制的时候，调用了showdialog()方法来显示div2中的内容
 * 		从而显示了一个 表单权限控制对话框，设定表单权限后，点击确定 调用closeDialog()方法，实现表单权限数据数据的保存
 * 		并生成后续 需要的 json和xml信息（此时保存了 各个环节表单权限控制信息的jons和xml，并记录 下那些 环节设置了权限）
 * 2生成xml
 * 	  xml生成在点击保存流程的时候处理
 * 	  主要实现方法toXML(toxmlString);
 *
 **********************************************************************************************************************************/
var actName = "wfDefineInfoAction";
var domainName = "wfDefineInfo";
var jsonObj; //临时保存使用
var formFiledMapObj = null;		// 表单结果定义信息JSON对象
var formJsonStr = ""; //临时保存，通过ajax取得的所有表单并保存成json格式。
$(document).ready(function(){
	// 自动计算控制流程图形高度
	setTimeout(function(){
		var bodyHeight = document.documentElement.scrollHeight - 30;
		$("#iframeHTML").height(bodyHeight);

		// 窗口改变大小时，也改变编辑区域的大小
		$(window).bind("resize",function(){
			bodyHeight = document.documentElement.scrollHeight - 30;
			$("#iframeHTML").width($(document).width());
			$("#iframeHTML").height(bodyHeight);
		});
	},500);

	// 取得指定表单的表单权限定义信息
	var formcode = $('#WF_formcode').val();
	if(typeof(formcode)!="undefined" && formcode!=null && formcode!=""){
		getFormFieldMapValueByCode(formcode);
	}

	// 监视表单选择用来自动调用ajax来获取表单权限设置的json数据
	$("#WF_formcode").change(function(){
		formcode = $('#WF_formcode').val();
		getFormFieldMapValueByCode(formcode);
	});

	// 根据选择的是什么类型的流程，来决定并发、同步、子流程按钮的显示与否
	$("#WF_type").change(function(){
		if($.browser.msie){
			if($(this).val().toLowerCase()=="free"){
				window.frames["iframeHTML"].hideFixedButton();
				window.frames["iframeHTML"].setPreSetStepStatus(false);
			}else{
				window.frames["iframeHTML"].showFixedButton();
				window.frames["iframeHTML"].setPreSetStepStatus(true);
			}
		}else{
			if($(this).val().toLowerCase()=="free"){
				document.getElementById("iframeHTML").contentWindow.hideFixedButton();
				window.frames["iframeHTML"].setPreSetStepStatus(false);
			}else{
				document.getElementById("iframeHTML").contentWindow.showFixedButton();
				window.frames["iframeHTML"].setPreSetStepStatus(true);
			}
		}
	});

	// 生成tab页控件
	$("#tabs").tabs();

	// 设置流程批示
	$("input[type*='radio'][name='WF_isCanComment']").click(function(){
		if (this.value == 0) {
			$("#WF_commentUserType").prop("disabled",true);
			$("#WF_commentUsersName").prop("disabled",true);
			$("#WF_commentUserType").val("");
		}else {
			$("#WF_commentUserType").prop("disabled",false);
			$("#WF_commentUsersName").prop("disabled",false);
			if($("#WF_commentUserType").val()==""){
				$("#WF_commentUserType").val("ALL");
			}
		}
	})
	// 初始化
	if($("input[type*='radio'][name='WF_isCanComment']:checked").val()=="0"){
			$("#WF_commentUserType").prop("disabled",true);
			$("#WF_commentUsersName").prop("disabled",true);
			$("#WF_commentUserType").val("");
	}


	// 设置转换其它流程人员
	$("input[type*='radio'][name='WF_isCanConvert']").click(function(){
		if ($(this).val() == "0") {
			$("#WF_convertUserType").prop("disabled",true);
			$("#WF_convertUsersName").prop("disabled",true);
			$("#WF_convertUserType").val("");
		}else {
			$("#WF_convertUserType").prop("disabled",false);
			$("#WF_convertUsersName").prop("disabled",false);
			if($("#WF_convertUserType").val()==""){
				$("#WF_convertUserType").val("ALL");
			}
		}
	})
	// 初始化
	if($("input[type*='radio'][name='WF_isCanConvert']:checked").val()=="0"){
			$("#WF_convertUserType").prop("disabled",true);
			$("#WF_convertUsersName").prop("disabled",true);
			$("#WF_convertUserType").val("");
	}

	// 设置是否可发布
	$("input[type*='radio'][name='WF_isCanPublish']").click(function(){
		if ($(this).val() == "0") {
			$("#WF_publishUsersType").prop("disabled",true);
			$("#WF_publishUsersName").prop("disabled",true);
			$("#WF_publishUsersType").val("");
		}else {
			$("#WF_publishUsersType").prop("disabled",false);
			$("#WF_publishUsersName").prop("disabled",false);
			if($("#WF_publishUsersType").val()==""){
				$("#WF_publishUsersType").val("RUNTIME");
			}
		}
	})
	// 初始化
	if($("input[type*='radio'][name='WF_isCanPublish']:checked").val()=="0"){
			$("#WF_publishUsersType").prop("disabled",true);
			$("#WF_publishUsersName").prop("disabled",true);
			$("#WF_publishUsersType").val("");
	}



	// 点击"确定"按钮时,对页面上的内容进行检测,看其是否符合条件
	$("input:button[name=btn_ok]").click(function() {
		setDialogHide();
		/*
		var rtn = $('form').validationEngine({
					returnIsValid : true,
					alertShow : true
				});
		if (rtn == true) {
			setDialogHide();
		} else {
			return false;
		}
		*/
	});



	// 用来控制事件的显示和隐藏
	$("#tabs-3 tr:eq(2)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(2)").find("td:eq(0)").hide();
	$("#tabs-3 tr:eq(3)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(3)").find("td:eq(0)").hide();
	$("#tabs-3 tr:eq(6)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(6)").find("td:eq(0)").hide();
	$("#tabs-3 tr:eq(7)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(7)").find("td:eq(0)").hide();
	$("#tabs-3 tr:eq(10)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(10)").find("td:eq(0)").hide();
	$("#tabs-3 tr:eq(11)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(11)").find("td:eq(0)").hide();
	$("#tabs-3 tr:eq(14)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(14)").find("td:eq(0)").hide();
	$("#tabs-3 tr:eq(15)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(15)").find("td:eq(0)").hide();
	$("#tabs-3 tr:eq(18)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(18)").find("td:eq(0)").hide();
	$("#tabs-3 tr:eq(19)").find("th:eq(0)").hide();
	$("#tabs-3 tr:eq(19)").find("td:eq(0)").hide();

	$('#WF_preCreateEventType').change(function(){
		if (this.value == 'CLASS' || this.value == 'SPRING') {
			$("#tabs-3 tr:eq(2)").find("th:eq(0)").show();
			$("#tabs-3 tr:eq(2)").find("td:eq(0)").show();
			$("#tabs-3 tr:eq(3)").find("th:eq(0)").hide();
			$("#tabs-3 tr:eq(3)").find("td:eq(0)").hide();
		}
		else
			if (this.value == 'BEANSHELL' || this.value == 'GROOVY' || this.value == 'GROOVY_FILE') {
				$("#tabs-3 tr:eq(3)").find("th:eq(0)").show();
				$("#tabs-3 tr:eq(3)").find("td:eq(0)").show();
				$("#tabs-3 tr:eq(2)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(2)").find("td:eq(0)").hide();
			}
			else {
				$("#tabs-3 tr:eq(2)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(2)").find("td:eq(0)").hide();
				$("#tabs-3 tr:eq(3)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(3)").find("td:eq(0)").hide();
			}
	});
	$('#WF_postCreateEventType').change(function(){
		if (this.value == 'CLASS' || this.value == 'SPRING') {
			$("#tabs-3 tr:eq(6)").find("th:eq(0)").show();
			$("#tabs-3 tr:eq(6)").find("td:eq(0)").show();
			$("#tabs-3 tr:eq(7)").find("th:eq(0)").hide();
			$("#tabs-3 tr:eq(7)").find("td:eq(0)").hide();
		}
		else
			if (this.value == 'BEANSHELL' || this.value == 'GROOVY' || this.value == 'GROOVY_FILE') {
				$("#tabs-3 tr:eq(7)").find("th:eq(0)").show();
				$("#tabs-3 tr:eq(7)").find("td:eq(0)").show();
				$("#tabs-3 tr:eq(6)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(6)").find("td:eq(0)").hide();
			}
			else {
				$("#tabs-3 tr:eq(6)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(6)").find("td:eq(0)").hide();
				$("#tabs-3 tr:eq(7)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(7)").find("td:eq(0)").hide();
			}
	});
	$('#WF_statusChangedEventType').change(function(){
		if (this.value == 'CLASS' || this.value == 'SPRING') {
			$("#tabs-3 tr:eq(10)").find("th:eq(0)").show();
			$("#tabs-3 tr:eq(10)").find("td:eq(0)").show();
			$("#tabs-3 tr:eq(11)").find("th:eq(0)").hide();
			$("#tabs-3 tr:eq(11)").find("td:eq(0)").hide();
		}
		else
			if (this.value == 'BEANSHELL' || this.value == 'GROOVY' || this.value == 'GROOVY_FILE') {
				$("#tabs-3 tr:eq(11)").find("th:eq(0)").show();
				$("#tabs-3 tr:eq(11)").find("td:eq(0)").show();
				$("#tabs-3 tr:eq(10)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(10)").find("td:eq(0)").hide();
			}
			else {
				$("#tabs-3 tr:eq(10)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(10)").find("td:eq(0)").hide();
				$("#tabs-3 tr:eq(11)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(11)").find("td:eq(0)").hide();
			}
	});
	$('#WF_preEndEventType').change(function(){
		if (this.value == 'CLASS' || this.value == 'SPRING') {
			$("#tabs-3 tr:eq(14)").find("th:eq(0)").show();
			$("#tabs-3 tr:eq(14)").find("td:eq(0)").show();
			$("#tabs-3 tr:eq(15)").find("th:eq(0)").hide();
			$("#tabs-3 tr:eq(15)").find("td:eq(0)").hide();
		}
		else
			if (this.value == 'BEANSHELL' || this.value == 'GROOVY' || this.value == 'GROOVY_FILE') {
				$("#tabs-3 tr:eq(15)").find("th:eq(0)").show();
				$("#tabs-3 tr:eq(15)").find("td:eq(0)").show();
				$("#tabs-3 tr:eq(14)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(14)").find("td:eq(0)").hide();
			}
			else {
				$("#tabs-3 tr:eq(14)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(14)").find("td:eq(0)").hide();
				$("#tabs-3 tr:eq(15)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(15)").find("td:eq(0)").hide();
			}
	});
	$('#WF_postEndEventType').change(function(){
		if (this.value == 'CLASS' || this.value == 'SPRING') {
			$("#tabs-3 tr:eq(18)").find("th:eq(0)").show();
			$("#tabs-3 tr:eq(18)").find("td:eq(0)").show();
			$("#tabs-3 tr:eq(19)").find("th:eq(0)").hide();
			$("#tabs-3 tr:eq(19)").find("td:eq(0)").hide();
		}
		else
			if (this.value == 'BEANSHELL' || this.value == 'GROOVY' || this.value == 'GROOVY_FILE') {
				$("#tabs-3 tr:eq(19)").find("th:eq(0)").show();
				$("#tabs-3 tr:eq(19)").find("td:eq(0)").show();
				$("#tabs-3 tr:eq(18)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(18)").find("td:eq(0)").hide();
			}
			else {
				$("#tabs-3 tr:eq(18)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(18)").find("td:eq(0)").hide();
				$("#tabs-3 tr:eq(19)").find("th:eq(0)").hide();
				$("#tabs-3 tr:eq(19)").find("td:eq(0)").hide();
			}
	});

	// 绑定管理员、新建流程实例人员、批示人员、转换其它流程人员、默认发布对象的select改变事件。改变时，需要将原先的值清空
	$("select#WF_managersType").change(function(){
		$("#WF_managersName").val("");
		$("#WF_managers").val("");
	});
	$("select#WF_newDocUsersType").change(function(){
		$("#WF_newDocUsersName").val("");
		$("#WF_newDocUsers").val("");
	});
	$("select#WF_commentUserType").change(function(){
		$("#WF_commentUsersName").val("");
		$("#WF_commentUsers").val("");
	});
	$("select#WF_convertUserType").change(function(){
		$("#WF_convertUsersName").val("");
		$("#WF_convertUsers").val("");
	});
	$("select#WF_publishUsersType").change(function(){
		$("#WF_publishUsersName").val("");
		$("#WF_publishUsers").val("");
	});


	/*
	if(editState=="modify"){
		// 给“本流程所用表单”项增加参数
		addDropDown("WF_formName",function(){
			openDropReference('formDefine','normalForms','WF_formcode=value2&WF_formName=value3','WF_formName','refer',null,null,{width:500});
		});
	}
	*/


	// 显示流程定义信息弹出窗口
	opt_show();
});




/*********************************************
 * 				各个方法	  				 *
 *********************************************/

/**
 * 取得页面编辑状态
 */
function getEditStatus(){
	return	_editState;
}

/**
 *根据表单的代码，取得表单的定义信息(formFieldMap)
 *
 *如果是数据子表，则整个数据子表作为一个对象进行权限控制（只读＼修改＼隐藏＼必填）
 *
 */
function getFormFieldMapValueByCode(formcode){
	// 加随机数，以保证每次取到的都是最新数据
	$.getJSON("./formDefineAction!getFormFiledMapJSON.shtml?r=" + Math.random(), {"formDefine.formCode": formcode}, function(data){
		// 将返回的数据转换为本表单权限设置需的格式.默认权限为READONLY
		var vs = new Array();
		var gridName = "";
		var i = 1;
		$.each(data.ffms, function(index, ffm){
			if(typeof(ffm.gridName)=="undefined" || ffm.gridName==null){
				var obj = {};
				obj["id"] 		= ffm.id;				//
				obj["chName"] 	= ffm.chName;			// 中文名
				obj["name"] 	= ffm.fieldName;		// 元素名
				obj["isGrid"] 	= false;				// 是否数据子表
				obj["perm"] 	= "READONLY";			// 默认为只读
				vs.push(obj);
			}else{
				if(gridName!=ffm.gridName){
					var obj = {};
					obj["id"] 		= ffm.id;				//
					obj["chName"] 	= "数据子表" + i;		// 中文名
					obj["name"] 	= ffm.gridName;			// 元素名
					obj["isGrid"] 	= true;					// 是否数据子表
					obj["perm"] 	= "READONLY";			// 默认为只读
					vs.push(obj);
					gridName = ffm.gridName;
					i++;
				}
			}
		});
		formJsonStr = JSON.encode(vs); 				//生成json格式的表单域
	});
}
/**
 * 取得表单定义信息（供页面里的iframe内部调用）
 */
function getFormJsonStr(){
	if(typeof(formJsonStr)=="undefined" || formJsonStr==""){
		alert("请注意：表单定义信息未生成！");
		return;
	}
	//alert("formJsonStr:\r\n" + formJsonStr);
	return	formJsonStr;
}

/**
 * 保存前检查录入的数据是否符合要求
 */
function checkForm(){
	//var strMsg = "";
	//类型：AlphaNumeric,Date,Email,Empty,Numeric,Money,PostalCode,Url
	//strMsg = strMsg + Validate("wfDefineInfo.name", "名称", "NotEmpty");
	//strMsg = strMsg + Validate("wfDefineInfo.code", "代码", "NotEmpty");
	//strMsg = strMsg + Validate("WF_descript", "描述", "NotEmpty");
	//strMsg = strMsg + Validate("wfDefineInfo.sortNum", "顺序号", "NotEmpty|AlphaNumeric");
	//strMsg = strMsg + Validate("wfDefineInfo.wfTypeLib.id", "所属分类库", "NotEmpty");
	//strMsg = strMsg + Validate("WF_type", "流程类型", "NotEmpty");
	//strMsg = strMsg + Validate("WF_managersType", "管理员类型", "NotEmpty");
	//strMsg = strMsg + Validate("WF_newDocUsersType", "可用本流程人员类型", "NotEmpty");
	//if ($("#WF_managersType").val() != "" && $("#WF_managersType").val().toLowerCase() != "all") {
	//	strMsg = strMsg + Validate("WF_managers", "管理员人员范围", "NotEmpty");
	//}
	//if ($("#WF_newDocUsersType").val() != "" && $("#WF_newDocUsersType").val().toLowerCase() != "all") {
	//	strMsg = strMsg + Validate("WF_newDocUsersType", "可用本流程人员范围", "NotEmpty");
	//}
	//if ($("#WF_isCanComment").val() == "1") {
	//	if ($("#WF_commentUserType").val() != "" && $("#WF_commentUserType").val().toLowerCase() != "all") {
	//		strMsg = strMsg + Validate("WF_commentUsers", "批示人员范围", "NotEmpty");
	//	}
	//}
	//if (strMsg != "") {
	//	alert("数据检查错误：\r\n\r\n" + strMsg);
	//	return false;
	//}
	//else
	//	return true;
	return $("form").validationEngine({returnIsValid:true,alertShow:true});
}
function managersType(){
	var alertText = "* 该项为必填项";
	if ($("#WF_managersType").val() != "" && $("#WF_managersType").val().toLowerCase() != "all") {
		if($("#WF_managers").val()=="" || $("#WF_managers").val()==null)
			return true+"#"+alertText;
		else
			return false;
	}
	else
		return false;
}
function newDocUsersType(){
	var alertText = "* 该项为必填项";
	if ($("#WF_newDocUsersType").val() != "" && $("#WF_newDocUsersType").val().toLowerCase() != "all") {
		if($("#WF_newDocUsersName").val()=="" || $("#WF_newDocUsersName").val()==null){
			return true+"#"+alertText;
		}
		else{
			return false;
		}
	}
	else
		return false;
}

function isCanComment(){
	var alertText = "* 该项为必填项";
	if ($(":radio[name='WF_isCanComment']:checked").val() == "1") {
		if ($("#WF_commentUserType").val() != "" && $("#WF_commentUserType").val().toLowerCase() != "all") {
			if($("#WF_commentUsers").val()=="" || $("#WF_commentUsers").val()==null){
				return true+"#"+alertText;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
	}
	else{
		return false;
	}
}

function isCanConvert(){
	var alertText = "* 该项为必填项";
	if ($(":radio[name='WF_isCanConvert']:checked").val() == "1") {
		if ($("#WF_convertUserType").val() != "" && $("#WF_convertUserType").val().toLowerCase() != "all") {
			if($("#WF_convertUsers").val()=="" || $("#WF_convertUsers").val()==null){
				return true+"#"+alertText;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
	}
	else{
		return false;
	}
}

/**
 * 是否可发布
 * @return {}
 */
function isCanPublish(){
	var alertText = "* 该项为必填项";
	if ($(":radio[name='WF_isCanPublish']:checked").val() == "1") {
		if ($("#WF_publishUsersType").val() != ""
			&& ($("#WF_publishUsersType").val().toLowerCase() != "all"
				&& $("#WF_publishUsersType").val().toLowerCase() != "runtime")) {
			if($("#WF_publishUsers").val()=="" || $("#WF_publishUsers").val()==null){
				return true+"#"+alertText;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
	}
	else{
		return false;
	}
}

/**
 * 完成设计且存为新版本
 */
function opt_save(){
	if (!checkForm())
		return;

	openWaitDialog("正在保存，请你稍候....");
	// 取得流程定义的原始数据,字符串格式.如果用json格式传递数据,因为是在不同窗口调用,所以会破坏json数据的格式!!!
	var str = document.frames["iframeHTML"].MenuAction.save(true);

	if(str==null || str==""){
		closeWaitDialog();
		return;
	}

	// 将字符串转换为json对象
	var wfDefJson = {};
	try{
		wfDefJson = JSON.decode(str);
	}catch(e){
		alert("将json格式字符串转换为对象时出错!");
		closeWaitDialog();
		return;
	}



	// 将流程定义的原始数据，组装成系统要求的流程定义数据。包括json格式及xml格式两种，分别保存
	var wfDefObj = createWorkFlowJsonObj(wfDefJson);

	//alert("wfDefObj.WF_isShowIdeaList:" + typeof(wfDefObj.WF_isShowIdeaList) + "   value:" + wfDefObj.WF_isShowIdeaList);
	// json格式的流程定义信息数据
	$("#wfDefineInfo\\.jsonContent").val(JSON.encode(wfDefObj));

	var jsonToXml = createWorkFlowXml(wfDefObj);
	// xml格式的流程定义信息数据
	$("#wfDefineInfo\\.xmlContent").val(JSON.toXML(jsonToXml));


	// 取消元素的disabled状态，否则值不能传到action中
	$(":radio[disabled][checked],:checkbox[disabled][checked]").prop("disabled",false);

	// 调用action保存
	document.forms[0].action = actName + '!save.shtml';
	document.forms[0].submit();
}

/**
 * 存为草稿
 */
function opt_saveAsDraft(){
	if (!checkForm())
		return;

	openWaitDialog("正在保存，请你稍候....");

	// 取得流程定义的原始数据,字符串格式.如果用json格式传递数据,因为是在不同窗口调用,所以会破坏json数据的格式!!!
	var str = document.frames["iframeHTML"].MenuAction.save(false);		// 草稿保存时不检查正确性

	if(str==null || str==""){
		closeWaitDialog();
		return;
	}

	// 将字符串转换为json对象
	var wfDefJson = {};
	try{
		wfDefJson = JSON.decode(str);
	}catch(e){
		alert("将json格式字符串转换为对象时出错!");
		closeWaitDialog();
		return;
	}





	var wfDefObj = createWorkFlowJsonObj(wfDefJson);
	// json格式的流程定义信息数据
	$("#wfDefineInfo\\.jsonContent").val(JSON.encode(wfDefObj));

	var jsonToXml = createWorkFlowXml(wfDefObj);
	// xml格式的流程定义信息数据
	$("#wfDefineInfo\\.xmlContent").val(JSON.toXML(jsonToXml));



	// 取消元素的disabled状态，否则值不能传到action中
	$(":radio[disabled][checked],:checkbox[disabled][checked]").prop("disabled",false);

	// 调用action保存
	document.forms[0].action = actName + '!saveAsDraft.shtml';
	document.forms[0].submit();
}

/**
 * 完成设计。保存，但不创建新版本，而是更新当前版本数据
 */
function opt_saveAndReplace(){
	if (!checkForm())
		return;

	openWaitDialog("正在保存，请你稍候....");

	// 取得流程定义的原始数据,字符串格式.如果用json格式传递数据,因为是在不同窗口调用,所以会破坏json数据的格式!!!
	var str = document.frames["iframeHTML"].MenuAction.save(true);

	if(str==null || str==""){
		closeWaitDialog();
		return;
	}

	// 将字符串转换为json对象
	var wfDefJson = {};
	try{
		wfDefJson = JSON.decode(str);
	}catch(e){
		alert("将json格式字符串转换为对象时出错!");
		closeWaitDialog();
		return;
	}



	// 将流程定义的原始数据，组装成系统要求的流程定义数据。包括json格式及xml格式两种，分别保存
	var wfDefObj = createWorkFlowJsonObj(wfDefJson);
	// json格式的流程定义信息数据
	$("#wfDefineInfo\\.jsonContent").val(JSON.encode(wfDefObj));

	var jsonToXml = createWorkFlowXml(wfDefObj);
	// xml格式的流程定义信息数据
	$("#wfDefineInfo\\.xmlContent").val(JSON.toXML(jsonToXml));


	// 取消元素的disabled状态，否则值不能传到action中
	$(":radio[disabled][checked],:checkbox[disabled][checked]").prop("disabled",false);

	//if(confirm("你要保存吗?")==false){
	//	return;
	//}

	// 调用action保存
	document.forms[0].action = actName + '!saveAndReplace.shtml';
	document.forms[0].submit();

}
function opt_show(){
	dialog("流程定义信息编辑", "id:showLc", "650px", "auto", "text");
}


function createWorkFlowJsonObj(wfDefObj){
		/*调用保存的action 之前需要做的事情有
	 * 			1 取得面定义的WF开头的表单域内容组装成一个json格式的字符串
	 * 			2 取得表单权限控制的所有所有信息
	 * 			3 将12所得加到 最终要保存的json格式的字符串中
	 */
	// 第一步 取得 要组装到xml里面的 输入域的值

	if(wfDefObj==null || wfDefObj=={}){	// 检测是否有新流程设计
		alert("未定义各环节属性!");
		return;
	}



	// 将以WF_开头的有关流程定义信息组装成字符串（因为这部分信息不是存放在数据库字段中，而是放在json,xml格式的定义信息中）
	$("input:text[name^=WF_]").each(function(){
		wfDefObj[this.name] = $(this).val();
	});


	$("input:radio[name^=WF_]:checked").each(function(){
		wfDefObj[this.name] = $(this).val();
	});

	$("select[name^=WF_]").each(function(){
		wfDefObj[this.name] = $(this).val();
	});
	$("textarea[name^=WF_]").each(function(){
		wfDefObj[this.name] = $(this).val();
	});
//	validJson(wfDefObj);


	return	wfDefObj;
}
/**
 * 将流程定义的原始数据，组装成系统要求的流程定义数据。包括json格式及xml格式两种
 */
function makeJsonAndXml(wfDefObj){
	/*调用保存的action 之前需要做的事情有
	 * 			1 取得面定义的WF开头的表单域内容组装成一个json格式的字符串
	 * 			2 取得表单权限控制的所有所有信息
	 * 			3 将12所得加到 最终要保存的json格式的字符串中
	 */
	// 第一步 取得 要组装到xml里面的 输入域的值

	if(wfDefObj==null || wfDefObj=={}){	// 检测是否有新流程设计
		alert("未定义各环节属性!");
		return;
	}



	// 将以WF_开头的有关流程定义信息组装成字符串（因为这部分信息不是存放在数据库字段中，而是放在json,xml格式的定义信息中）
	$(":text[name^=WF_]").each(function(){
		wfDefObj[this.name] = $(this).val();
	});
	$(":radio[name^=WF_][checked]").each(function(){
		wfDefObj[this.name] = $(this).val();
	});
	$("select[name^=WF_]").each(function(){
		wfDefObj[this.name] = $(this).val();
	});
	$("textarea[name^=WF_]").each(function(){
		wfDefObj[this.name] = $(this).val();
	});



	// 将流程图定义的原始信息，与流程定义信息相加，以生成完整的流程定义json格式数据
	//wfDefJsonStr = wfDefJsonStr.substring(0,1) + WF_str.join("") + wfDefJsonStr.substring(1,wfDefJsonStr.length);
//	validJson(wfDefJsonStr);

	//  把生成的xml值保存到xmlContent中
	convertWfDefJsonToXML(wfDefObj);
}

/**
 * 将json格式的流程定义结果信息(包含了流程定义信息,但结构及格式不符合系统要求的标准),
 * 转换成系统所需要的符合标准的xml格式数据.
 * 并保存到wfDefineInfo.xmlContent中.这是符合流程定义对象模型的数据
 *
 * json格式的流程定义信息保存在wfDefineInfo.jsonContent中.是设计器生成的数据,并不符合流程定义对象模型
 *
 */
function createWorkFlowXml(wfDefJson){
	// 生成wfDefJson对象
	/*
	var wfDefJson = eval("(" + str + ")");
	var wfDefJson = JSON.decode(str);
	*/

	// 将会导致xml转换出错的特殊字符进行替换
	var str = JSON.encode(wfDefJson);
	str = str.replace(/\&/gi,"&amp;").replace(/\</gi,"&lt;").replace(/\>/gi,"&gt;");
	wfDefJson = JSON.decode(str);

	var jsonToXml = {
		WorkFlow: {
			id: '',
			name: '',
			descript: '',
			type: '',
			formCode: '',
			documentTypeId: '',
			managersType: '',
			managers: '',
			newDocUsersType: '',
			newDocUsers: '',
			executeTime: '',
			executeTimeMemo: '',
			readType: '',
			isCanReread: false,
			isArchived: false,
			isCanPublish: true,
			publishUsersType:'',
			publishUsers:'',
			publishUsersName:'',
			isShowFormForPublisher: false,
			isShowContentEditForPublisher: true,
			readAction: '',
			isNoticeCreater: true,
			isShowIdeaList: true,
			isShowHisIdeaForPublisher: false,
			isAutoCreateIdea: false,
			defaultIdea: '',
			isNeedIdea: true,
			/*
			isCanComment: false,
			commentUserType: '',
			commentUsers: '',
			commentUsersName: '',
			*/
			isCanConvert: true,
			convertUserType: '',
			convertUsers: '',
			convertUsersName: '',
			postCreateEvent: {
				name: '',
				type: '',
				className: '',
				script: ''
			},
			postEndEvent: {
				name: '',
				type: '',
				className: '',
				script: ''
			},
			preCreateEvent: {
				name: '',
				type: '',
				className: '',
				script: ''
			},
			preEndEvent: {
				name: '',
				type: '',
				className: '',
				script: ''
			},
			statusChangedEvent: {
				name: '',
				type: '',
				className: '',
				script: ''
			},
			paths: {
				Path: []
			},
			steps: {
				Step: []
			}
		}
	}

	// 给jsonToXml 赋值
	jsonToXml.WorkFlow.id 				= $("#wfDefineInfo\\.id").val() ? $("#wfDefineInfo\\.id").val() : '';
	jsonToXml.WorkFlow.name 			= $("#wfDefineInfo\\.name").val() ? $("#wfDefineInfo\\.name").val() : '';
	jsonToXml.WorkFlow.descript 		= wfDefJson.WF_descript ? wfDefJson.WF_descript : '';
	jsonToXml.WorkFlow.type 			= wfDefJson.WF_type ? wfDefJson.WF_type : '';
	jsonToXml.WorkFlow.formCode 		= wfDefJson.WF_formcode ? wfDefJson.WF_formcode : '';
	jsonToXml.WorkFlow.documentTypeId   = wfDefJson.WF_documentTypeId ? wfDefJson.WF_documentTypeId : '';
	jsonToXml.WorkFlow.managersType 	= wfDefJson.WF_managersType ? wfDefJson.WF_managersType : '';
	jsonToXml.WorkFlow.managers 		= wfDefJson.WF_managers ? wfDefJson.WF_managers : '';
	jsonToXml.WorkFlow.managersName		= wfDefJson.WF_managersName ? wfDefJson.WF_managersName : '';
	jsonToXml.WorkFlow.newDocUsersType 	= wfDefJson.WF_newDocUsersType ? wfDefJson.WF_newDocUsersType : '';
	jsonToXml.WorkFlow.newDocUsers 		= wfDefJson.WF_newDocUsers ? wfDefJson.WF_newDocUsers : '';
	jsonToXml.WorkFlow.newDocUsersName	= wfDefJson.WF_newDocUsersName ? wfDefJson.WF_newDocUsersName : '';
	jsonToXml.WorkFlow.executeTime 		= wfDefJson.WF_executeTime ? wfDefJson.WF_executeTime : '';
	jsonToXml.WorkFlow.executeTimeMemo 	= wfDefJson.WF_executeTimeMemo ? wfDefJson.WF_executeTimeMemo : '';
	jsonToXml.WorkFlow.readType 		= wfDefJson.WF_readType ? wfDefJson.WF_readType : '';
	jsonToXml.WorkFlow.isCanReread 		= wfDefJson.WF_isCanReread.trim()=="1" ? true : false;
	jsonToXml.WorkFlow.isArchived 		= wfDefJson.WF_isArchived.trim()=="1" ? true : false;
	// 发布对象
	jsonToXml.WorkFlow.isCanPublish 	= wfDefJson.WF_isCanPublish.trim()=="1" ?  true : false;
	jsonToXml.WorkFlow.publishUsersType = wfDefJson.WF_publishUsersType ? wfDefJson.WF_publishUsersType : '';
	jsonToXml.WorkFlow.publishUsers 	= wfDefJson.WF_publishUsers ?  wfDefJson.WF_publishUsers : '';
	jsonToXml.WorkFlow.publishUsersName = wfDefJson.WF_publishUsersName ?  wfDefJson.WF_publishUsersName : '';

	jsonToXml.WorkFlow.isShowFormForPublisher	= wfDefJson.WF_isShowFormForPublisher.trim()=="1" ?  true : false;
	jsonToXml.WorkFlow.readAction 		= wfDefJson.WF_readAction ? wfDefJson.WF_readAction : '';
	jsonToXml.WorkFlow.isNoticeCreater 	= wfDefJson.WF_isNoticeCreater.trim()=="1" ? true : false;

	//alert(" wfDefJson.WF_isShowIdeaList.trim():" +  wfDefJson.WF_isShowIdeaList.trim() + "     ==1:" + ( wfDefJson.WF_isShowIdeaList.trim()=="1"));
	jsonToXml.WorkFlow.isShowIdeaList 	= wfDefJson.WF_isShowIdeaList.trim()=="1" ? true : false;

	// 发布对象是否可以看见历史处理意见
	jsonToXml.WorkFlow.isShowHisIdeaForPublisher 	= wfDefJson.WF_isShowHisIdeaForPublisher.trim()=="1" ? true : false;
	// 发布对象是否可以看见正文编辑器内容
	jsonToXml.WorkFlow.isShowContentEditForPublisher 	= wfDefJson.WF_isShowContentEditForPublisher.trim()=="1" ? true : false;
	// 是否自动根据选择的处理人生成处理意见
	jsonToXml.WorkFlow.isAutoCreateIdea = wfDefJson.WF_isAutoCreateIdea.trim()=="1" ? true : false;
	// 默认处理意见
	jsonToXml.WorkFlow.defaultIdea 		= wfDefJson.WF_defaultIdea.trim();
	// 处理 意见是否必填
	jsonToXml.WorkFlow.isNeedIdea 		= wfDefJson.WF_isNeedIdea.trim();

	// 批示
	/*
	jsonToXml.WorkFlow.isCanComment 	= wfDefJson.WF_isCanComment.trim()=="1" ? true : false;
	jsonToXml.WorkFlow.commentUserType 	= wfDefJson.WF_commentUserType ? wfDefJson.WF_commentUserType : '';
	jsonToXml.WorkFlow.commentUsers 	= wfDefJson.WF_commentUsers ? wfDefJson.WF_commentUsers : '';
	jsonToXml.WorkFlow.commentUsersName	= wfDefJson.WF_commentUsersName ? wfDefJson.WF_commentUsersName : '';
	*/
	// 流程转换
	jsonToXml.WorkFlow.isCanConvert 	= wfDefJson.WF_isCanConvert.trim()=="1" ? true : false;
	jsonToXml.WorkFlow.convertUserType 	= wfDefJson.WF_convertUserType ? wfDefJson.WF_convertUserType : '';
	jsonToXml.WorkFlow.convertUsers 	= wfDefJson.WF_convertUsers ? wfDefJson.WF_convertUsers : '';
	jsonToXml.WorkFlow.convertUsersName	= wfDefJson.WF_convertUsersName ? wfDefJson.WF_convertUsersName : '';

	// 给流程的各个事件赋值
	jsonToXml.WorkFlow.postCreateEvent.name 		= wfDefJson.WF_postCreateEventName ? wfDefJson.WF_postCreateEventName : '';
	jsonToXml.WorkFlow.postCreateEvent.type 		= wfDefJson.WF_postCreateEventType ? wfDefJson.WF_postCreateEventType : '';
	jsonToXml.WorkFlow.postCreateEvent.className 	= wfDefJson.WF_postCreateEventClass ? wfDefJson.WF_postCreateEventClass : '';
	jsonToXml.WorkFlow.postCreateEvent.script 		= wfDefJson.WF_postCreateEventScript ? wfDefJson.WF_postCreateEventScript : '';

	jsonToXml.WorkFlow.postEndEvent.name 			= wfDefJson.WF_postEndEventName ? wfDefJson.WF_postEndEventName : '';
	jsonToXml.WorkFlow.postEndEvent.type 			= wfDefJson.WF_postEndEventType ? wfDefJson.WF_postEndEventType : '';
	jsonToXml.WorkFlow.postEndEvent.className 		= wfDefJson.WF_postEndEventClass ? wfDefJson.WF_postEndEventClass : '';
	jsonToXml.WorkFlow.postEndEvent.script 			= wfDefJson.WF_postEndEventScript ? wfDefJson.WF_postEndEventScript : '';

	jsonToXml.WorkFlow.preCreateEvent.name 			= wfDefJson.WF_preCreateEventName ? wfDefJson.WF_preCreateEventName : '';
	jsonToXml.WorkFlow.preCreateEvent.type 			= wfDefJson.WF_preCreateEventType ? wfDefJson.WF_preCreateEventType : '';
	jsonToXml.WorkFlow.preCreateEvent.className 	= wfDefJson.WF_preCreateEventClass ? wfDefJson.WF_preCreateEventClass : '';
	jsonToXml.WorkFlow.preCreateEvent.script 		= wfDefJson.WF_preCreateEventScript ? wfDefJson.WF_preCreateEventScript : '';

	jsonToXml.WorkFlow.preEndEvent.name 			= wfDefJson.WF_preEndEventName ? wfDefJson.WF_preEndEventName : '';
	jsonToXml.WorkFlow.preEndEvent.type 			= wfDefJson.WF_preEndEventType ? wfDefJson.WF_preEndEventType : '';
	jsonToXml.WorkFlow.preEndEvent.className 		= wfDefJson.WF_preEndEventClass ? wfDefJson.WF_preEndEventClass : '';
	jsonToXml.WorkFlow.preEndEvent.script 			= wfDefJson.WF_preEndEventScript ? wfDefJson.WF_preEndEventScript : '';

	jsonToXml.WorkFlow.statusChangedEvent.name 		= wfDefJson.WF_statusChangedEventName ? wfDefJson.WF_statusChangedEventName : '';
	jsonToXml.WorkFlow.statusChangedEvent.type 		= wfDefJson.WF_statusChangedEventType ? wfDefJson.WF_statusChangedEventType : '';
	jsonToXml.WorkFlow.statusChangedEvent.className = wfDefJson.WF_statusChangedEventClass ? wfDefJson.WF_statusChangedEventClass : '';
	jsonToXml.WorkFlow.statusChangedEvent.script 	= wfDefJson.WF_statusChangedEventScript ? wfDefJson.WF_statusChangedEventScript : '';


	// 将流程中的各条路径转换信息成相应的json值
	for (i = 0; i < wfDefJson.lines.length; i++) {
		if (wfDefJson.lines[i].property == null) {
			alert("路径：" + wfDefJson.lines[i].name + "   的属性未设定");
			return false;//如果步骤数据未设定则退出保存
		}
		else {
			var newPath = {
				id: '',
				condition: '',
				startStepId: '',
				endStepId: ''
			};
			newPath.id = wfDefJson.lines[i].id;
			if(newPath.id==null || newPath.id==""){
				alert("路径的id不能为空!");
				return;
			}
			newPath.condition = wfDefJson.lines[i].property[2].value ? wfDefJson.lines[i].property[2].value : '';
			newPath.startStepId = wfDefJson.lines[i].from ? wfDefJson.lines[i].from : '';
			newPath.endStepId = wfDefJson.lines[i].to ? wfDefJson.lines[i].to : '';

			jsonToXml.WorkFlow.paths.Path.push(newPath);
		}
	}

	// 将流程中的各个步骤（节点）信息转换为相应的json值
	for (var i = 0; i < wfDefJson.nodes.length; i++) {
		if (wfDefJson.nodes[i].property == null) {
			alert("环节:" + wfDefJson.nodes[i].name + "  的属性未设定！");
			return false; //如果环节数据未设定则退出保存
		}
		var step = {
			id: '',											// 步骤id
			name: '',										// 步骤名称
			type: '',										// 步骤类型
			sort: '',										// 步骤顺序
			executeMode: 'MANUAL',								// 处理方式
			isPreSetNextStep: false,						// 是否预设后续步骤
			preSetNextStepIds: '',							// 预设步骤的id
			preSetNextStepNames: '',						// 预设步骤的名称
			priorDealStepIds:'',                            // 优先步骤的id
			priorDealStepNames:'',                          // 优先步骤的名称
			isCycle: false,									// 下步骤可否为自身
			stepsSelectMode: 'ONE',							// 多步骤选择方式
			doConditionShow: '',							// 执行本步骤条件(显示名称)
			doCondition: '',								// 执行本步骤条件表达式(实际计算用)
			isAutoSendToExecuter: false,						// 是否自动递交给处理人
			executers: '',									// 本步骤可选处理人范围
			executersName: '',								// 本步骤可选处理人范围(显示名称)
			executerType: '',								// 本步骤可选处理人类型
			executerRelation: '',							// 处理人员关系
			isAutoSendToReader: false,							// 是否自动递交给传阅人
			readerType: '',									// 本步骤可选传阅人类型
			readers: '',									// 本步骤可选传阅人范围
			readersName: '',								// 本步骤可选传阅人范围(显示名称)
			ccUserType: '',									// 本步骤可选抄送人类型
			ccUsers: '',									// 本步骤可选抄送人范围
			ccUsersName: '',								// 本步骤可选抄送人范围(显示名称)
			replyObjType: '',								// 本步骤可选回复对象类型
			replyObjs: '',									// 本步骤可选回复对象范围
			replyObjsName: '',								// 本步骤可选回复对象范围(显示名称)
			replyObjsCustomName: '',						// 本步骤可选回复对象自定义显示名称（用于提交弹出框处的显示）
			canEvaluation: false,							// 是否可评分
			isPopup: false,							        // 是否弹窗提示
			auditingStandardsId: '',						// 审核标准ＩＤＳ
			auditingStandardsName: '',						// 审核标准ＮＡＭＥＳ
			evaluationTypeId: '',							// 考核类型ＩＤＳ
			evaluationTypeName: '',							// 考核类型ＮＡＭＥＳ
			annotationExampleId: '',						// 批注范例ＩＤＳ
			annotationExampleName: '',						// 批注范例ＮＡＭＥＳ
			canSelfEvaluation: false,						// 是否可自评
			selfEvaluationMainBodyId: '',					// 自评主体ID
			selfEvaluationMainBodyName: '',					// 自评主体名称
			canAddExecuters: false,							// 能否动态增加处理人（只用于自由流程）
			isPriorDeal: false,							    // 是否优先处理
			canMobileDeal: false,							// 是否可移动端处理
			canGetSmsGovDesktop: false,						// 短信对象获取
			showOpinionRange: 'ALL',						// 步骤人员显示的意见范围
			isBackStep: false,							    // 是否指定为反馈步骤
			isUnderTakeStep: false,							// 是否承办步骤
			preEvent: {										// 进入前事件

				name: '',
				type: '',
				className: '',
				script: ''
			},
			postEvent: {									// 离开后事件
				name: '',
				type: '',
				className: '',
				script: ''
			},
			formFieldPerms: {								// 表单权限
				FormFieldPerm: []
			},
			operatePerm: {									// 步骤操作权限
				canRollback: '',							// 是否可退回
				canRevoke: '',								// 是否可收回
				canFinish: '',							    // 是否可结束
				canPublish: '',								// 是否可发布
				canDisplayPublisher:'',                     // 是否可显示发布对象
				canModifyPublisher:'',                      // 是否可修改发布对象
				canShowBackInfo:'',                         // 是否显示反馈信息
				canVeto: '',								// 是否可否决
				canAskFor: '',								// 是否可请示
				canAskWeekDelay: '',						// 最多一星期  是否可申请延期
				canAskWeekRefuse: '',						// 最多一星期  是否可申请拒办
				canAskWeekBack: '',							// 最多一星期  是否可退文审核
				canFileUpload: '',							// 附件_是否可上传
				canFileRemove: '',							// 附件_是否可删除
				canFileDownload: '',						// 附件_是否可下载
				canWordSeal: '',							// word_是否可盖章
                canAgainWordSeal:'',                        // word是否二次盖章
                wordSealType:'',                        	// word盖章方式
				canWordShowMark: '',						// word_是否显示修改痕迹
				canWordShowToolbar: '',						// word_是否显示编辑器工具栏
				canWordModifyDoc: '',						// word_是否可修改文档
				canWordHandDraw: '',						// word_是否可手写签名
				canPrintDoc: '',							// 打印_是否可打印正文
				canPrintForm: ''							// 打印_是否可打印表单
			}
		};

		step.id = wfDefJson.nodes[i].id ? wfDefJson.nodes[i].id : '';								// 步骤id
		step.name = wfDefJson.nodes[i].name ? wfDefJson.nodes[i].name : '';							// 步骤名称
		step.type = wfDefJson.nodes[i].type ? wfDefJson.nodes[i].type : '';							// 步骤类型



		var props = wfDefJson.nodes[i].property;
		step.executeMode = getStepPropValue(props,"n_p_execute_mode");
		step.sort = getStepPropValue(props,"n_p_sort");							// 步骤顺序
		// 处理方式
		//alert("name:"+ step.name + "\r\nstep.executeMode:" + step.executeMode);
		if(step.executeMode!="ANY" && step.executeMode!="ALL"){
			step.executeMode = "MANUAL";
		}
		if(jsonToXml.WorkFlow.type.toUpperCase()=="FREE"){	// 只有自由 流程才可预设步骤、动态增加处理人
			step.isPreSetNextStep 			= getStepPropValue(props,"n_p_isPreSetNextStep");
			step.preSetNextStepIds			= getStepPropValue(props,"n_p_preSetNextStepIds");
			step.preSetNextStepNames		= getStepPropValue(props,"n_p_preSetNextStepNames");

			step.canAddExecuters			= getStepPropValue(props,"n_p_canAddExecuters");		// 能否动态增加处理人

			step.priorDealStepIds			= getStepPropValue(props,"n_p_priorDealStepIds");
			step.priorDealStepNames			= getStepPropValue(props,"n_p_priorDealStepNames");

		}else{
			step.isPreSetNextStep 			= false;
			step.preSetNextStepIds			= "";
			step.preSetNextStepNames		= "";

			step.canAddExecuters			= false;												// 能否动态增加处理人
		}
		//alert("name:"+ step.name + "\r\nstep.executeMode:" + step.executeMode + "\r\n step.canAddExecuters:" + step.canAddExecuters);
		step.isCycle = getStepPropValue(props,"n_p_isCycle");										// 下步骤可否为自身
		step.stepsSelectMode = getStepPropValue(props,"n_p_stepsSelectMode");						// 多步骤选择方式
		step.doConditionShow = getStepPropValue(props,"n_p_doConditionShow");						// 执行本步骤条件（显示用）
		step.doCondition = getStepPropValue(props,"n_p_doCondition");								// 执行本步骤条件（计算用）
		step.showOpinionRange = getStepPropValue(props,"n_p_showOpinionRange");						// 步骤人员显示的意见范围
		step.isBackStep = getStepPropValue(props,"n_p_isBackStep");									// 指定为反馈步骤
		step.isUnderTakeStep = getStepPropValue(props,"n_p_isUnderTakeStep");					    // 指定为承办步骤
		step.isPriorDeal = getStepPropValue(props,"n_p_isPriorDeal");								// 是否优先处理


		step.isAutoSendToExecuter			= getStepPropValue(props,"n_p_isAutoSendToExecuter");
		step.executers 						= getStepPropValue(props,"n_p_executers");
		step.executersName					= getStepPropValue(props,"n_p_executersName");
		step.executerType					= getStepPropValue(props,"n_p_executerType");
		step.executerRelation				= getStepPropValue(props,"n_p_executerRelation");
		step.isAutoSendToReader 			= getStepPropValue(props,"n_p_isAutoSendToReader");
		step.readers 						= getStepPropValue(props,"n_p_readers");
		step.readersName					= getStepPropValue(props,"n_p_readersName");
		step.readerType 					= getStepPropValue(props,"n_p_readerType");
		step.ccUsers 						= getStepPropValue(props,"n_p_ccUsers");
		step.ccUsersName					= getStepPropValue(props,"n_p_ccUsersName");
		step.ccUserType 					= getStepPropValue(props,"n_p_ccUserType");
		step.replyObjs 						= getStepPropValue(props,"n_p_replyObjs");
		step.replyObjsName					= getStepPropValue(props,"n_p_replyObjsName");
		step.replyObjType 					= getStepPropValue(props,"n_p_replyObjType");
		step.replyObjCustomName 			= getStepPropValue(props,"n_p_replyObjCustomName");
		step.canEvaluation                  = getStepPropValue(props,"n_p_canEvaluation"); // 是否可评分
		step.isPopup                        = getStepPropValue(props,"n_p_isPopup"); // 是否弹窗提示
		step.evaluationTypeId 				= getStepPropValue(props,"n_p_evaluationTypeId");
		step.evaluationTypeName				= getStepPropValue(props,"n_p_evaluationTypeName");
		step.auditingStandardsId 			= getStepPropValue(props,"n_p_auditingStandardsId");
		step.auditingStandardsName			= getStepPropValue(props,"n_p_auditingStandardsName");
		step.annotationExampleId 			= getStepPropValue(props,"n_p_annotationExampleId");
		step.annotationExampleName			= getStepPropValue(props,"n_p_annotationExampleName");
		step.canSelfEvaluation              = getStepPropValue(props,"n_p_canSelfEvaluation"); // 是否可自评
		step.selfEvaluationMainBodyId 		= getStepPropValue(props,"n_p_selfEvaluationMainBodyId");
		step.selfEvaluationMainBodyName		= getStepPropValue(props,"n_p_selfEvaluationMainBodyName");
		step.canMobileDeal					= getStepPropValue(props,"n_p_canMobileDeal");
		step.canGetSmsGovDesktop			= getStepPropValue(props,"n_p_canGetSmsGovDesktop");

		// 进入前执行的事件
		step.preEvent.name 					= getStepPropValue(props,"n_p_preEventName");
		step.preEvent.type 					= getStepPropValue(props,"n_p_preEventType");
		step.preEvent.className 			= getStepPropValue(props,"n_p_preEventClassName");
		step.preEvent.script 				= getStepPropValue(props,"n_p_preEventScript");

		// 结束后执行的事件
		step.postEvent.name 				= getStepPropValue(props,"n_p_postEventName");
		step.postEvent.type 				= getStepPropValue(props,"n_p_postEventType");
		step.postEvent.className 			= getStepPropValue(props,"n_p_postEventClassName");
		step.postEvent.script 				= getStepPropValue(props,"n_p_postEventScript");


		step.operatePerm.canRollback 		= getStepPropValue(props,"n_p_canRollback");
		step.operatePerm.canRevoke 			= getStepPropValue(props,"n_p_canRevoke");
		step.operatePerm.canFinish			= getStepPropValue(props,"n_p_canFinish");
		step.operatePerm.canPublish			= getStepPropValue(props,"n_p_canPublish");
		step.operatePerm.canSeeReplyObj		= getStepPropValue(props,"n_p_canSeeReplyObj");
		step.operatePerm.canAddReplyObj		= getStepPropValue(props,"n_p_canAddReplyObj");
		step.operatePerm.canPeriodDeal		= getStepPropValue(props,"n_p_canPeriodDeal");
		step.operatePerm.canToPiShi			= getStepPropValue(props,"n_p_canToPiShi");
		step.operatePerm.canToSwdj			= getStepPropValue(props,"n_p_canToSwdj");
		step.operatePerm.canDisplayPublisher = getStepPropValue(props,"n_p_canDisplayPublisher");
		step.operatePerm.canModifyPublisher = getStepPropValue(props,"n_p_canModifyPublisher");
		step.operatePerm.canShowBackInfo    = getStepPropValue(props,"n_p_canShowBackInfo");
		step.operatePerm.canVeto 			= getStepPropValue(props,"n_p_canVeto");
		step.operatePerm.canAskFor 			= getStepPropValue(props,"n_p_canAskFor");
		step.operatePerm.canAskWeekDelay 	= getStepPropValue(props,"n_p_canAskWeekDelay");
		step.operatePerm.canAskWeekRefuse 	= getStepPropValue(props,"n_p_canAskWeekRefuse");
		step.operatePerm.canAskWeekBack 	= getStepPropValue(props,"n_p_canAskWeekBack");
		step.operatePerm.canFileUpload 		= getStepPropValue(props,"n_p_canFileUpload");
		step.operatePerm.canFileRemove 		= getStepPropValue(props,"n_p_canFileRemove");
		step.operatePerm.canFileDownload 	= getStepPropValue(props,"n_p_canFileDownload");
		step.operatePerm.canUploadBackFile 	= getStepPropValue(props,"n_p_canUploadBackFile");
		step.operatePerm.canWordSeal 		= getStepPropValue(props,"n_p_canWordSeal");
		step.operatePerm.canAgainWordSeal 	= getStepPropValue(props,"n_p_canAgainWordSeal");
		step.operatePerm.wordSealType 	    = getStepPropValue(props,"n_p_wordSealType");
		step.operatePerm.canWordShowMark 	= getStepPropValue(props,"n_p_canWordShowMark");
		step.operatePerm.canWordShowToolbar = getStepPropValue(props,"n_p_canWordShowToolbar");
		step.operatePerm.canWordModifyDoc	= getStepPropValue(props,"n_p_canWordModifyDoc");
		step.operatePerm.canWordHandDraw	= getStepPropValue(props,"n_p_canWordHandDraw");
		step.operatePerm.canPrintDoc 		= getStepPropValue(props,"n_p_canPrintDoc");
		step.operatePerm.canPrintForm 		= getStepPropValue(props,"n_p_canPrintForm");

		// 表单权限设置
		step.formFieldPerms.FormFieldPerm	= getStepPropValue(props,"n_p_formFiledPerm");

		jsonToXml.WorkFlow.steps.Step.push(step);
	}

	return jsonToXml;
}
/**
 * 根据id取得property中的值
 */
function getStepPropValue(props,id){
	var value = "";
	if(typeof(props)=="undefined" || props==null || id==null || id=="")
		return	value;
	for(var j=0; j < props.length; j++){
		if(props[j].id.trim().toLowerCase() == id.trim().toLowerCase()){
			value = props[j].value;
			break;
		}
	}
	return	value;
}


/**
 * 选择批示人员
 */
function selectUserForComment(){
	var username = $('#WF_commentUserType').val();
	switch (username) {
		case "USER":
			//个人
			openReferenceM('SysUser', 'showEditDeptUserTree', 'WF_commentUsers=value1&WF_commentUsersName=value2');
			break;
		case "DEPT":
			//部门
			openReferenceM('SysDept', 'showEditDeptTree', 'WF_commentUsers=value1&WF_commentUsersName=value2');
			break;
		case "GROUP":
			//岗位
			openReferenceM('PermUserGroup', 'listGroup', 'WF_commentUsers=value1&WF_commentUsersName=value4');
			break;
		case "ROLE":
			//角色
			openReferenceM('PermUserRole', 'listRole', 'WF_commentUsers=value1&WF_commentUsersName=value3');
			break;
		case "ALL":
			//全体
			alert("你已选择了全体人员！");
			break;
		case "CONDITION":
			//条件
			dialog("人员选择条件设置", "iframe:./r.shtml?p=/workflow/define/sub/userCondition.ftl&value=WF_commentUsers&show=WF_commentUsersName", 700, 420, "text");
			break;
		default:
			alert("请先选择人员类型！");
	}
}

/**
 * 选择转换其它流程人员
 */
function selectUserForConvert(){
	var username = $('#WF_convertUserType').val();
	switch (username) {
		case "USER":
			//个人
			openReferenceM('SysUser', 'showEditDeptUserTree', 'WF_convertUsers=value1&WF_convertUsersName=value2',null,null,null,$("#cur_orgDeptRootId").val());
			break;
		case "DEPT":
			//部门
			openReferenceM('SysDept', 'showEditDeptTree', 'WF_convertUsers=value1&WF_convertUsersName=value2',null,null,null,$("#cur_orgDeptRootId").val());
			break;
		case "GROUP":
			//岗位
			openReferenceM('PermUserGroup', 'listGroup', 'WF_convertUsers=value1&WF_convertUsersName=value4');
			break;
		case "ROLE":
			//角色
			openReferenceM('PermUserRole', 'listRole', 'WF_convertUsers=value1&WF_convertUsersName=value3');
			break;
		case "ALL":
			//全体
			alert("你已选择了全体人员！");
			break;
		case "CONDITION":
			//条件
			dialog("人员选择条件设置", "iframe:./r.shtml?p=/workflow/define/sub/userCondition.ftl&value=WF_convertUsers&show=WF_convertUsersName", 700, 420, "text");
			break;
		default:
			alert("请先选择人员类型！");
	}
}

/**
 * 选择能用本流程的人员
 */
function selectUsersForCanUsed(){
	var username = $('#WF_newDocUsersType').val();
	switch (username) {
		case "NULL":
			break;
		case "USER":
			//个人
			openReferenceM('SysUser', 'showEditDeptUserTree', 'WF_newDocUsers=value1&WF_newDocUsersName=value2',null,null,null,$("#cur_orgDeptRootId").val());
			break;
		case "DEPT":
			//部门
			if($("#cur_userId").val()=="0"){

				openReferenceM('SysDept', 'showEditDeptTreeAll', 'WF_newDocUsers=value1&WF_newDocUsersName=value2');
			}else{

				openReferenceM('SysDept', 'showEditDeptTree', 'WF_newDocUsers=value1&WF_newDocUsersName=value2',null,null,null,$("#cur_orgDeptRootId").val());
			}

			break;
		case "GROUP":
			//岗位
			openReferenceM('PermUserGroup', 'listGroup', 'WF_newDocUsers=value1&WF_newDocUsersName=value4');
			break;
		case "ROLE":
			//角色
			openReferenceM('PermUserRole', 'listRole', 'WF_newDocUsers=value1&WF_newDocUsersName=value3');
			break;
		case "ALL":
			//全体
			alert("你已选择了全体人员！");
			break;
		case "CONDITION":
			//条件
			dialog("人员选择条件设置", "iframe:./r.shtml?p=/workflow/define/sub/userCondition.ftl&value=WF_newDocUsers&show=WF_newDocUsersName", 700, 420, "text");
			break;
		default:
			alert("请先选择人员类型！");
	}
}

/**
 * 选择管理员
 */
function selectUsersForAdmin(){
	var username = $('#WF_managersType').val();
	switch (username) {
		case "NULL":
			break;
		case "USER":
			//个人
			openReferenceM('SysUser', 'showEditDeptUserTree', 'WF_managers=value1&WF_managersName=value2',null,null,null,$("#cur_orgDeptRootId").val());
			break;
		case "DEPT":
			//部门
			openReferenceM('SysDept', 'showEditDeptTree', 'WF_managers=value1&WF_managersName=value2',null,null,null,$("#cur_orgDeptRootId").val())
			break;
		case "GROUP":
			//岗位
			openReferenceM('PermUserGroup', 'listGroup', 'WF_managers=value1&WF_managersName=value4');
			break;
		case "ROLE":
			//角色
			openReferenceM('PermUserRole', 'listRole', 'WF_managers=value1&WF_managersName=value3');
			break;
		case "ALL":
			//全体
			//openReferenceM('wfDefineInfo', 'allDeptUsers', 'WF_managers=value1&WF_managersName=value2');
			alert("你已选择了全体人员！");
			break;
		case "CONDITION":
			//条件
			dialog("人员选择条件设置", "iframe:./r.shtml?p=/workflow/define/sub/userCondition.ftl&value=WF_managers&show=WF_managersName", 700, 420, "text");
			break;
		default:
			alert("请先选择人员类型！");
	}
}
/**
 * 选择默认发布对象
 */
function selectUserForPublish(){
	var username = $('#WF_publishUsersType').val();
	switch (username) {
		case "USER":
			//个人
			openReferenceM('SysUser', 'showEditDeptUserTree', 'WF_publishUsers=value1&WF_publishUsersName=value2',null,null,null,$("#cur_orgDeptRootId").val());
			break;
		case "DEPT":
			//部门
			openReferenceM('SysDept', 'showEditDeptTree', 'WF_publishUsers=value1&WF_publishUsersName=value2',null,null,null,$("#cur_orgDeptRootId").val());
			break;
		case "GROUP":
			//岗位
			openReferenceM('PermUserGroup', 'listGroup', 'WF_publishUsers=value1&WF_publishUsersName=value4');
			break;
		case "ROLE":
			//角色
			openReferenceM('PermUserRole', 'listRole', 'WF_publishUsers=value1&WF_publishUsersName=value3');
			break;
		case "ALL":
			//全体
			alert("你已选择了全体人员！");
			break;
		case "CONDITION":
			//条件
			dialog("人员选择条件设置", "iframe:./r.shtml?p=/workflow/define/sub/userCondition.ftl&value=WF_publishUsers&show=WF_publishUsersName", 700, 420, "text");
			break;
		case "FORM_ELEMENT":
			//表单元素
			selectFormElement();
			break;
		default:
			alert("请先选择人员类型！");
	}
}
/**
 * 默认发布对象设置为表单元素，选择一个表单元素
 */
function selectFormElement(){
	// 取得流程定义页面上的表单代码数据。
	var formCode = $("#WF_formcode").val();
	if(formCode==null || formCode==""){
		alert("没有设置表单，不能设置表单元素发布对象！");
		return;
	}

	var ffmObjs = {};
	// 取得父页面上的表单定义信息(通过ajax取得的formFieldMap信息)
	ffmObjs = JSON.decode(getFormJsonStr());

	var items = new Array();
	items.push('<div align="center" valign="middle" style="height:100%;">');
	items.push('	请选择一个表单元素：<select id="formElementList" name="formElementList">');
	items.push('		<option value="">==请选择==</option>');
	for (var i = 0; i < ffmObjs.length; i++) {
		var ffmName = ffmObjs[i].name;
		items.push('		<option value="' + ffmName + '">' + ffmObjs[i].chName + '</option>');
	}
	items.push('	</select>');
	items.push('	<br>');
	items.push("	<div align='center' style='margin-top:40px;'>");
	items.push("		<input type='button' value=' 确  定 ' onclick='selectFormElementOK();'>");
	items.push("			&nbsp;&nbsp;&nbsp;&nbsp;");
	items.push("		<input type='button' value=' 取  消 ' onclick='setDialogHide();'>");
	items.push("	</div>");
	items.push("</div>");
	$("#dialogDiv").html(items.join(""));

	if(!isEmpty($("#WF_publishUsers").val())){
		$("select#formElementList").val($("#WF_publishUsers").val());
	}

	dialog("请选择一个表单元素", "id:dialogDiv",400,160);
}

/**
 * 选择表单元素
 */
function selectFormElementOK(){
	if(!isEmpty($("select#formElementList").val())){
		$("#WF_publishUsers").val($("select#formElementList").val());
		$("#WF_publishUsersName").val($("option:selected",$("select#formElementList")).html());
	}
	setDialogHide();
}


/**
 * 用于检验json格式的字符串是否合法
 */
function	validJson(str){
	try{
		var obj = eval("(" + str + ")");
		alert("校验正确！count=" + obj.count);
	}catch(e){
		alert("校验时出错！" + e + "\r\n\r\n"
				+ "name:" + e.name + "\r\n\r\n"
				+ "number:" + e.number  + "\r\n\r\n"
				+ "description:" + e.description + "\r\n\r\n"
				+ "message:" + e.message);
		dialog("json内容","text:" + str);
	}
}

/**
 * 查看表单设计内容
 */
function	viewForm(){
	if (isEmpty($("#WF_formcode").val())) {
		alert("请先选择一个表单！");
		return;
	}
	$.ajax({
			url : "./formDefineAction!getFormDefineHTMLJSON.shtml",
			dataType : 'json',
			data : {
				"formDefine.formCode" : $("#WF_formcode").val()
			},
			success : function(data) {
				if (typeof(data)!="undefined" && typeof(data.fail) != "undefined") {
					alert("取不到代码为：" + $("#WF_formcode").val() + " 的表单定义模板:" + data.fail);
					return;
				}
				$("#htmlDiv").html(data.info);
				dialog("表单模板","id:htmlDiv");
			}
		});
}